package cn.itcast.web.controller;


import cn.itcast.common.utils.Encrypt;
import cn.itcast.domain.system.Module;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.ModuleService;
import cn.itcast.service.system.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
public class LoginController extends BaseController{

	@Autowired
	private UserService userService;

	@Autowired
	private ModuleService moduleService;


	/**
	 * 用户登录
	 */
	@RequestMapping("/login")
	public String login(String password,String email) {
		//1.验证用户名和邮箱
		if (StringUtils.isEmpty(email) || StringUtils.isEmpty(password)) {
			return "redirect:/login.jsp";
		}
		try {
			//2.获取subject工具类
			Subject subject = SecurityUtils.getSubject();
			//3.调用subject的login方法进行shiro登录
			/**
			 * shiro中的登录数据（内部封装用户名和密码）；
			 *      UsernamePasswordToken构造方法
			 *             1.用户名、邮箱
			 *             2.密码
			 */
			UsernamePasswordToken token = new UsernamePasswordToken(email,password);
			subject.login(token);
			//4.如果正常执行，没有异常
			//4.1 将数据存入session
			User loginUser = (User)subject.getPrincipal(); //获取安全数据（用户对象）
			session.setAttribute("loginUser",loginUser);
			List<Module> list = moduleService.findByUserId(loginUser.getId());
			session.setAttribute("modules",list);
			//4.2 跳转主页
			return "home/main";
		}catch (Exception e) {
			e.printStackTrace();
			//5.如果抛出异常，表示登录失败，重新登录
			request.setAttribute("error","用户名或者密码错误");
			return "forward:/login.jsp";
		}
	}


	/**
	 * 用户登录
	 */
//	@RequestMapping("/login")
//	public String login(String password,String email) {
//		//1.判断邮箱和密码是否为空
//		if (StringUtils.isEmpty(email) || StringUtils.isEmpty(password)) {
//			//重新登录
//			return "redirect:/login.jsp";
//		}
//		//2.根据邮箱查询用户
//		User loginUser = userService.findByEmail(email);
//
//		//对登录输入的密码进行加密
//		password = Encrypt.md5(password,email);
//
//		if(loginUser == null || !loginUser.getPassword().equals(password)) {
//			//2.1 如果用户为空或者用户的密码和登录输入的密码不一致
//			request.setAttribute("error","用户名或者密码错误");
//			return "forward:/login.jsp";
//		}else{
//			//2.2 如果一致
//			//将用户数据保存到session
//			session.setAttribute("loginUser",loginUser);
//			List<Module> list = moduleService.findByUserId(loginUser.getId());
//			session.setAttribute("modules",list);
//			//跳转主页
//			return "home/main";
//		}
//	}

    //退出
    @RequestMapping(value = "/logout",name="用户登出")
    public String logout(){
        //清空shiro中的内存数据
	    Subject subject = SecurityUtils.getSubject();
	    //退出登录,自动清空shiro的内存
	    subject.logout();
	    return "forward:login.jsp";
    }

    @RequestMapping("/home")
    public String home(){
	    return "home/home";
    }
}
